<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 什么叫做纯函数
    1.相同输入总是会返回相同的输出
    2.不产生副作用
    3.不依赖于外部状态
    -->
    <script>
        /**
         * 首先先来看看什么不是纯函数
         * **/
        var a = 10
        function f(b) {
            return a + b
        }
        console.log(f(5));
        // 这不是纯函数，因为 会随着全局的 a 的值的改变而改变  不符合第一个和第三个
        obj = {}
        function f2(b) {
            obj.a = 10
            return b
        }
        console.log(f2(5));
        // 这也不是纯函数，因为会将全局的 obj 不满足第二条

        /*
        再来看看什么是纯函数
        */
        var values = { a: 1 };

        function pureFunction(a) {
            var b = 1;
            a = a * b + 2;
            return a;
        }

        var c = pureFunction(values.a);

        // `values.a` 没有被改变, 它的值仍然是 1
        /**
         * 副作用 函数副作用是指在调用函数时，除了返回函数值之外，还对主调用函数产生附加的影响。例如修改全局变量
         * (函数外的变量)或修改函数
        */
    </script>
</body>

</html>